সি প্রোগ্রামিং ভাষায় error code এবং return value চেকিং একটি গুরুত্বপূর্ণ প্র্যাকটিস, যা প্রোগ্রাম চলাকালীন সম্ভাব্য ভুল বা ত্রুটি সনাক্ত করতে সাহায্য করে। বিভিন্ন সি ফাংশন return value অথবা error code রিটার্ন করে, যা ব্যবহারের সময় ত্রুটির অবস্থাকে চিহ্নিত করতে ব্যবহৃত হয়। সঠিক error handling কোডের স্থিতিশীলতা নিশ্চিত করে এবং অপ্রত্যাশিত আচরণ বা ক্র্যাশ এড়ায়।
errno
ভেরিয়েবলটি সিস্টেম কলের ত্রুটি চিহ্নিত করতে ব্যবহৃত হয়।ফাংশন যখন একটি মান রিটার্ন করে, তখন এই রিটার্ন মানটি চেক করা গুরুত্বপূর্ণ, বিশেষত যখন ফাংশনের সফলতা বা ব্যর্থতা নির্ভর করে সেই মানের উপর। উদাহরণস্বরূপ, fopen()
ফাংশনটি ফাইল খুলতে ব্যবহৃত হয় এবং এটি সফল হলে একটি ফাইল পয়েন্টার রিটার্ন করে, কিন্তু যদি ফাইলটি না খোলা যায়, এটি NULL
রিটার্ন করে।
fopen()
এর Return Value চেক করা#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
printf("Error: Unable to open file.\n");
return 1; // ফাইল খোলার ক্ষেত্রে ত্রুটি
}
printf("File opened successfully.\n");
fclose(file); // ফাইল বন্ধ করা
return 0;
}
এখানে fopen()
ফাংশনের রিটার্ন ভ্যালু NULL
চেক করা হয়েছে। যদি NULL
রিটার্ন হয়, তাহলে এটি ফাইল খোলার ত্রুটি নির্দেশ করে এবং প্রোগ্রামটি বন্ধ হয়ে যায়।
অনেক সি ফাংশন error code রিটার্ন করে, বিশেষত সিস্টেম কলের ক্ষেত্রে। উদাহরণস্বরূপ, malloc()
ফাংশনটি যখন মেমোরি বরাদ্দে ব্যর্থ হয়, তখন এটি NULL
রিটার্ন করে। এছাড়াও, errno
ভেরিয়েবলটি সিস্টেম কলের ত্রুটি চিহ্নিত করতে ব্যবহৃত হয়, এবং এর মান বিভিন্ন ত্রুটির কোডের মাধ্যমে ব্যাখ্যা করা যায়।
malloc()
Error Code চেক করা#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = (int *)malloc(100 * sizeof(int));
if (ptr == NULL) {
printf("Error: Memory allocation failed.\n");
return 1; // মেমোরি বরাদ্দে ত্রুটি
}
printf("Memory allocated successfully.\n");
free(ptr); // মেমোরি মুক্ত করা
return 0;
}
এখানে malloc()
এর রিটার্ন ভ্যালু চেক করা হয়েছে, যদি এটি NULL
রিটার্ন করে, তাহলে "Memory allocation failed" বার্তা প্রদর্শন করা হয়।
errno
এবং এর ব্যবহারের উদাহরণসি প্রোগ্রামে যখন সিস্টেম কল বা স্ট্যান্ডার্ড লাইব্রেরি ফাংশন একটি ত্রুটি ঘটায়, তখন errno
ভেরিয়েবল সেট করা হয়, যা ত্রুটির ধরন নির্দেশ করে। errno
ভেরিয়েবলটি <errno.h>
হেডার ফাইলে ডিফাইন করা থাকে।
errno
চেক করা#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
int main() {
FILE *file = fopen("nonexistent_file.txt", "r");
if (file == NULL) {
printf("Error opening file: %s\n", strerror(errno)); // strerror() ব্যবহার করে ত্রুটির বর্ণনা
return 1;
}
fclose(file);
return 0;
}
এখানে, fopen()
যদি ফাইল না খুলতে পারে, তখন errno
সেট হয়ে strerror()
ফাংশনের মাধ্যমে ত্রুটির বর্ণনা প্রদর্শিত হয়।
errno
এর কিছু সাধারণ ত্রুটি কোড:ENOENT
: ফাইল বা ডিরেক্টরি খুঁজে পাওয়া যায়নি।ENOMEM
: মেমোরি বরাদ্দে ব্যর্থতা।EIO
: ইনপুট/আউটপুট ত্রুটি।EINVAL
: অবৈধ আর্গুমেন্ট।প্রায় সব সিস্টেম কল এবং লাইব্রেরি ফাংশন একটি নির্দিষ্ট রিটার্ন ভ্যালু প্রদান করে, যার মাধ্যমে প্রোগ্রামার সঠিকভাবে ত্রুটি চেক করতে পারেন। কিছু ফাংশনের ক্ষেত্রে ত্রুটি ঘটলে -1
বা NULL
রিটার্ন করা হয়, এবং সফল হলে অন্য কোন মান রিটার্ন করা হয়। এই রিটার্ন ভ্যালু চেক করার মাধ্যমে আপনি ত্রুটি পরিচালনা করতে পারবেন।
close()
এর Return Value চেক#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
int file_desc = open("example.txt", O_RDONLY);
if (file_desc == -1) {
printf("Error opening file.\n");
return 1; // ফাইল ওপেন করতে ব্যর্থ
}
// ফাইল বন্ধ করার সময় ত্রুটি চেক করা
if (close(file_desc) == -1) {
printf("Error closing file.\n");
return 1; // ফাইল বন্ধ করতে ব্যর্থ
}
printf("File closed successfully.\n");
return 0;
}
এখানে, open()
এবং close()
ফাংশনের রিটার্ন ভ্যালু চেক করা হয়েছে। -1
রিটার্ন হলে এটি ত্রুটি নির্দেশ করে।
fopen()
বা malloc()
এর রিটার্ন ভ্যালু চেক করে, আপনি ত্রুটি হ্যান্ডলিং করতে পারেন।errno
এর মাধ্যমে ত্রুটির ধরন নির্ধারণ করে। strerror()
ফাংশনটি errno
এর মান ব্যাখ্যা করতে ব্যবহৃত হয়।-1
বা NULL
চেকিং: সিস্টেম কল এবং লাইব্রেরি ফাংশনগুলো -1
বা NULL
রিটার্ন করলে এটি ত্রুটি নির্দেশ করে।common.read_more